#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2019/7/26 下午1:50
# @Author  : fugang_le
# @Software: PyCharm


'''
FuzzyWuzzy 是一个简单易用的模糊字符串匹配工具包。它依据 Levenshtein Distance 算法 计算两个序列之间的差异。
'''

from fuzzywuzzy import fuzz
from fuzzywuzzy import process


def simple_ratio():
    '''
    # 简单匹配（Simple Ratio）
    :return:
    '''
    str1 = '今天 外面 下 雨 了'
    str2 = '今天 外面 没有 雨 '

    score = fuzz.ratio(str1, str2)
    print(str1, '||', str2)
    print("simple ratio:", score)


def partial_ratio():
    '''
    # 非完全匹配（Partial Ratio）
    :return:
    '''
    str1 = '今天 外面 下 雨 了'
    str2 = '今天 外面 下 雨 '

    score = fuzz.partial_ratio(str1, str2)
    print(str1, '||', str2)
    print('partial ratio:', score)


def token_sort_ratio():
    '''
    # 忽略顺序匹配（Token Sort Ratio）
    :return:
    '''
    str1 = '今天 外面 下 雨 了'
    str2 = '今天 外面 下 雨 '

    score = fuzz.token_sort_ratio(str1, str2)
    print(str1, '||', str2)
    print('token sort ratio:', score)


def token_set_ratio():
    '''
    # 忽略顺序匹配（Token Set Ratio）
    :return:
    '''
    str1 = '今天 外面 下 雨 了'
    str2 = '今天 外面 下 雨 '

    score = fuzz.token_set_ratio(str1, str2)
    print(str1, '||', str2)
    print('token set ratio:', score)


def fuzz_process():
    '''
    用来放回模糊匹配的字符串和相似度
    :return:
    '''
    choices = ['今天 外面 下 雨 了',
               '今天 外面 没有 雨',
               '今天 下 雨 了 吗',
               '明天 外面 下 雨 吗']
    words = '今天 外面 太阳 好 大'
    result = process.extract(words, choices=choices, limit=2)
    print('choices={}'.format(choices))
    print('words={}'.format(words))
    print('extrace:', result)

    result = process.extractOne(words, choices)
    print('extractOne:', result)



if __name__ == '__main__':
    simple_ratio()
    print('#' * 30)
    partial_ratio()
    print('#' * 30)
    token_set_ratio()
    print('#' * 30)
    token_sort_ratio()
    print('#' * 30)
    fuzz_process()
